/** axios 二次封装 */
import axios from 'axios'
import { Toast } from 'vant'

// baseURL，process.env.NODE_ENV 可以取到 "development"(开发环境)、"production"(生产环境)
const baseURL = process.env.NODE_ENV === 'development' ? 'https://m.maoyan.com' : '真实后端接口的URL'

// 创建实例
const service = axios.create({
  baseURL,
  timeout: 5000
})

// 请求拦截
service.interceptors.request.use(config => {
  // 提示加载信息
  Toast.loading({
    message: 'loading...',
    forbidClick: true,
    duration: 0
  })
  // 将本地保存的 token 数据携带在请求头中发送到服务器
  config.headers = {
    ...config.headers
    // 'X-Token': localStorage.getItem('token')
  }
  return config
})

// 响应拦截，axios 对请求接口的数据响应内容做了包装，
// 真正接口中返回的数据是包装在响应对象的 data 属性中
service.interceptors.response.use(res => {
  // 关闭加载提示
  Toast.clear()

  if (res.status === 200) { // 能够正常获取到数据
    if (res.data.code === 200) { // 接口本身返回的是正常数据
      return res.data.data
    } else if (res.data.code === 4000 || res.data.code === 5000) { // token 失效或过期相关的状态处理
      // 清除 vuex 中保存的用户状态数据
      // 清理本地缓存的用户数据
      // 跳转到登录页面重新登录验证
    } else { // 返回的是有错误的数据
      const e = new Error('后端接口异常')
      e.error = res.data
      Promise.reject(e)
    }
  } else {
    const err = new Error('请求接口失败')
    err.error = res
    Promise.reject(err)
  }
})

export default service
